/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package CapaNegocios;

import controlador.TipousuariosJpaController;
import controlrestaurante.pmf;
import controlador.EmpleadosJpaController;
import entidad.Empleados;
import controlador.UsuariosJpaController;
import entidad.Usuarios;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import entidad.Tipousuarios;
import java.util.ArrayList;

/**
 *
 * @author Milvia
 */
public class CNUsuarios {
    public static boolean insertar(Usuarios usuario)
    {        
        try{
            UsuariosJpaController controlador = new UsuariosJpaController(pmf.getInstancia().getEMF());
            controlador.create(usuario);
        }catch (Exception e){
            return false;
        }
        return true;  
    }
    
    public static boolean insertar(String userName, String passwd, int idTipoUsuario, int idEmpleado)
    {
        TipousuariosJpaController controladorTipoUsuario = new TipousuariosJpaController(pmf.getInstancia().getEMF());
        Tipousuarios tipoUsuario = controladorTipoUsuario.findTipousuarios(idTipoUsuario);
        EmpleadosJpaController controladorEmpleado = new EmpleadosJpaController(pmf.getInstancia().getEMF());
        Empleados empleado = controladorEmpleado.findEmpleados(idEmpleado);
        if((tipoUsuario == null))
            return false;
        try{
            Usuarios usuario = new Usuarios();
            usuario.setUserName(userName);
            usuario.setPassword(passwd);
            usuario.setActivo(Boolean.TRUE);
            usuario.setTipoUsuarioidTipoUsuario(tipoUsuario);
            usuario.setEmpleadoidEmpleado(empleado);
            UsuariosJpaController controladorUsuario = new UsuariosJpaController(pmf.getInstancia().getEMF());
            controladorUsuario.create(usuario);
        }
        catch(Exception e )
        {
            return false;
        }
        return true;
    }
    
    public static boolean modificar(String userName, String passwd, int idTipoUsuario, int idEmpleado)
    {
        TipousuariosJpaController controladorTipoUsuario = new TipousuariosJpaController(pmf.getInstancia().getEMF());
        Tipousuarios tipoUsuario = controladorTipoUsuario.findTipousuarios(idTipoUsuario);
        EmpleadosJpaController controladorEmpleado = new EmpleadosJpaController(pmf.getInstancia().getEMF());
        Empleados empleado = controladorEmpleado.findEmpleados(idEmpleado);
        if((tipoUsuario == null) && (empleado == null))
            return false;
        try{
            Usuarios usuario = new Usuarios();
            usuario.setUserName(userName);
            usuario.setPassword(passwd);
            usuario.setActivo(Boolean.TRUE);
            usuario.setTipoUsuarioidTipoUsuario(tipoUsuario);
            usuario.setEmpleadoidEmpleado(empleado);
            UsuariosJpaController controladorUsuario = new UsuariosJpaController(pmf.getInstancia().getEMF());
            controladorUsuario.edit(usuario);
        }
        catch(Exception e )
        {
            return false;
        }
        return true;
    }
    
    public static boolean modificar(Usuarios prod)
    {
        
        try{
            UsuariosJpaController controlador = new UsuariosJpaController(pmf.getInstancia().getEMF());
            controlador.edit(prod);
        }
        catch(Exception e )
        {
            return false;
        }
        return true;
    }
    
     public static boolean eliminar(Usuarios prod)
    {
        
        try{
            UsuariosJpaController controlador = new UsuariosJpaController(pmf.getInstancia().getEMF());
            controlador.destroy(prod.getIdUsuarios());
        }
        catch(Exception e )
        {
            return false;
        }
        return true;
    }
    
    public static boolean activar (int id)
    {
        UsuariosJpaController controladorUsuario = new UsuariosJpaController(pmf.getInstancia().getEMF());
        Usuarios usuario = controladorUsuario.findUsuarios(id);
        if (usuario == null)
            return false;
        try{
            usuario.setActivo(Boolean.TRUE);
            UsuariosJpaController controlador = new UsuariosJpaController(pmf.getInstancia().getEMF());
            controlador.edit(usuario);
        }
        catch(Exception e){
            return false;
        }
        return true;
    }
    
    public static boolean desactivar (int id)
    {
        UsuariosJpaController controladorUsuario = new UsuariosJpaController(pmf.getInstancia().getEMF());
        Usuarios usuario = controladorUsuario.findUsuarios(id);
        if (usuario == null)
            return false;
        try{
            usuario.setActivo(Boolean.FALSE);
            UsuariosJpaController controlador = new UsuariosJpaController(pmf.getInstancia().getEMF());
            controlador.edit(usuario);
        }
        catch(Exception e){
            return false;
        }
        return true;
    }
    
    //***************Funciones Buscar***************
    public static Usuarios buscarId(int id)
    {
        Usuarios usuario;
        try{
            UsuariosJpaController controladorUsuario = new UsuariosJpaController(pmf.getInstancia().getEMF());
            usuario = controladorUsuario.findUsuarios(id);
        }
        catch(Exception e)
        {
            return null;
        }
        return usuario;    
    }
    
    public static List<Usuarios> buscarActivos()
    {
        List <Usuarios> lista= (List) Consultas.consulta("Usuarios", "findByActivo", "activo", true);
         return lista;
    }
    
    public static List<Usuarios> buscarEliminados()
    {
        List<Usuarios> usuarios = null;
        EntityManager em = pmf.getInstancia().getEMF().createEntityManager();
        try{
            Query consulta = em.createNamedQuery("Usuarios.findByActivo");
            consulta.setParameter("ativo", false);
            usuarios = consulta.getResultList();
        }
        catch(Exception e){
            return null;
        }
        finally{
            em.clear();
        }
        return usuarios;
    }
    
    public static List<Usuarios> buscarPorNombreDeUsuario(String nombreUsuario)
    {
        List<Usuarios> usuarios = null;
        EntityManager em =  pmf.getInstancia().getEMF().createEntityManager();
        try{
            Query consulta = em.createNamedQuery("Usuarios.findByUserName");
            consulta.setParameter("userName", nombreUsuario+"%");
            usuarios = consulta.getResultList();
        }
        catch(Exception e){
            return null;
        }
        finally{
            em.clear();
        }
        return usuarios;
    }
    
    public static List<Usuarios> buscarMeseros(int idPuesto)
    {
        List <Usuarios> lista = new ArrayList<Usuarios>() ;
        try{
            List<Usuarios> temp = CNUsuarios.buscarActivos();
            if(temp!=null)
                for(Usuarios te : temp)
                    if(te.getEmpleadoidEmpleado().getPuestoidPuesto().getIdPuestos()==idPuesto)
                        lista.add(te);
        }catch(Exception e)
        {
            return null;
        }
        return lista;
    }
    
    public static Usuarios autenticar(String usuario,String pass)
    {
        Usuarios us =null;
        try{
            List<Usuarios> lista;
            String qu = "SELECT  a FROM Usuarios a  " 
            + " WHERE a.userName = :user and a.password = :pass" ;
           Query quer = pmf.getInstancia().getEMF().createEntityManager().createQuery(qu);
           quer.setParameter("user", usuario);
           quer.setParameter("pass", pass);
           lista=(List<Usuarios>)quer.getResultList();
           us=lista.get(0); 
        }catch(Exception e)
        {
            return null;
        }
        return us;        
    }
}
